Command Binding MVVM (Model-View-ViewModel) প্যাটার্নের একটি গুরুত্বপূর্ণ বৈশিষ্ট্য, যা ইউজারের ইন্টারঅ্যাকশন (যেমন বাটনে ক্লিক) এবং ViewModel এর কার্যকরী কোড (অথবা কমান্ড) এর মধ্যে একটি পরিষ্কার, পুনঃব্যবহারযোগ্য এবং স্কেলেবল সম্পর্ক তৈরি করে। এটি View এবং ViewModel এর মধ্যে কিপর্যন্ত সরাসরি ইন্টারঅ্যাকশন থেকে বিরত থাকে, এবং অ্যাপ্লিকেশনের লজিক ও UI কে আলাদা রাখে।
এখানে Command Binding কী এবং কীভাবে এটি কাজ করে, তা বিস্তারিতভাবে ব্যাখ্যা করা হয়েছে।
Command Binding হল একটি প্রক্রিয়া, যার মাধ্যমে UI উপাদান (যেমন বাটন, চেকবক্স ইত্যাদি) কোনো Command (যা মূলত ViewModel এ সংজ্ঞায়িত একটি ক্লাস) এর সাথে বাইন্ড হয়। এই কমান্ডটি একটি নির্দিষ্ট অ্যাকশন বা লজিক পরিচালনা করে যখন ইউজার UI উপাদানে ইন্টারঅ্যাক্ট করে (যেমন, বাটনে ক্লিক করা)।
Command একটি ICommand ইন্টারফেসের মাধ্যমে বাস্তবায়িত হয়, যা দুটি প্রধান মেথড ধারণ করে:
ICommand ইন্টারফেস: প্রথমে ICommand ইন্টারফেসটি বাস্তবায়িত করতে হবে, যাতে কমান্ডটি কার্যকরী হতে পারে। এটি দুটি প্রধান মেথড এবং একটি ইভেন্ট ধারণ করে:
public interface ICommand
{
void Execute(object parameter);
bool CanExecute(object parameter);
event EventHandler CanExecuteChanged;
}
Concrete Command ক্লাস তৈরি: এর পরে, ICommand ইন্টারফেস বাস্তবায়িত করা একটি কনক্রিট কমান্ড ক্লাস তৈরি করতে হবে, যেখানে Execute()
এবং CanExecute()
মেথডের লজিক থাকবে।
উদাহরণ:
public class SubmitCommand : ICommand
{
private readonly ViewModel _viewModel;
public SubmitCommand(ViewModel viewModel)
{
_viewModel = viewModel;
}
public event EventHandler CanExecuteChanged;
public void Execute(object parameter)
{
// Submit action, e.g., save data
_viewModel.SubmitData();
}
public bool CanExecute(object parameter)
{
// Check if command can execute, e.g., if input is valid
return _viewModel.CanSubmit();
}
public void RaiseCanExecuteChanged()
{
CanExecuteChanged?.Invoke(this, EventArgs.Empty);
}
}
এখানে SubmitCommand
কমান্ডটি ViewModel এর SubmitData
মেথডটিকে কল করছে এবং CanExecute মেথডটি যাচাই করছে যে, ViewModel-এ কোনো শর্ত পূর্ণ হলে কি এই কমান্ডটি কার্যকরী হবে।
Command Property in ViewModel: ViewModel এ কমান্ডটি একটি প্রপার্টি হিসেবে যুক্ত করতে হবে, যা View এ বাইন্ড হবে। উদাহরণস্বরূপ:
public class ViewModel
{
public ICommand SubmitCommand { get; private set; }
public ViewModel()
{
SubmitCommand = new SubmitCommand(this);
}
public void SubmitData()
{
// Data submission logic
}
public bool CanSubmit()
{
// Check if all required fields are filled
return !string.IsNullOrEmpty(UserName);
}
}
এখানে SubmitCommand
একটি ICommand টাইপের প্রপার্টি যা SubmitCommand
ক্লাসের একটি ইনস্ট্যান্স ধারণ করছে।
View (XAML) Binding: View এ, XAML ফাইলের মাধ্যমে কমান্ডটি UI উপাদান (যেমন বাটন) এর সাথে বাইন্ড করা হয়। XAML তে Command
প্রপার্টি ব্যবহার করে এটি বাইন্ড করা হয়:
<Button Content="Submit"
Command="{Binding SubmitCommand}" />
এখানে, Button এর Command
প্রপার্টি ViewModel এর SubmitCommand
এর সাথে বাইন্ড হচ্ছে। যখন ইউজার বাটনে ক্লিক করবে, তখন SubmitCommand এর Execute()
মেথড চালু হবে।
CanExecute()
মেথডের মাধ্যমে নির্ধারণ করা যেতে পারে যে কমান্ডটি কখন কার্যকর হবে, যা ইউজারের ইনপুট অনুযায়ী শর্তবদ্ধ হতে পারে।ধরা যাক, একটি Login বাটনের জন্য কমান্ড তৈরি করতে:
ViewModel-এ LoginCommand
তৈরি করুন:
public class LoginViewModel
{
public ICommand LoginCommand { get; private set; }
public LoginViewModel()
{
LoginCommand = new RelayCommand(ExecuteLogin, CanExecuteLogin);
}
public void ExecuteLogin()
{
// Perform login logic
Console.WriteLine("Login successful");
}
public bool CanExecuteLogin()
{
// Check if username and password are valid
return !string.IsNullOrEmpty(UserName) && !string.IsNullOrEmpty(Password);
}
}
RelayCommand ক্লাস (যা ICommand
ইন্টারফেস বাস্তবায়িত করে) তৈরি করুন:
public class RelayCommand : ICommand
{
private readonly Action _execute;
private readonly Func<bool> _canExecute;
public RelayCommand(Action execute, Func<bool> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
public event EventHandler CanExecuteChanged;
public bool CanExecute(object parameter) => _canExecute();
public void Execute(object parameter) => _execute();
}
XAML এ কমান্ড বাইন্ডিং করুন:
<Button Content="Login"
Command="{Binding LoginCommand}" />
এই উদাহরণে, LoginCommand ইউজারের ইনপুট (ইউজারনেম এবং পাসওয়ার্ড) চেক করে এবং LoginCommand এর CanExecuteLogin()
মেথড দ্বারা যাচাই করে যে, বাটন ক্লিকের মাধ্যমে কমান্ডটি কার্যকরী হবে কিনা।
Command Binding MVVM প্যাটার্নে View এবং ViewModel এর মধ্যে একধরনের যোগাযোগ স্থাপন করে যা অ্যাপ্লিকেশনের লজিক ও UI এর মধ্যে পরিষ্কার সেপারেশন নিশ্চিত করে। এটি কোডের পুনঃব্যবহারযোগ্যতা, টেস্টেবিলিটি, এবং ডিকাপ্লিংয়ে সাহায্য করে।
common.read_more